#include "mainwindow.h"
#include "ui_mainwindow.h"



//不要在构造函数中构建，如果不显示，就有可能会被对象树删除，所以不要全部都创建出来，而是相应事件之后再去创建对象
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);      //设置UI
    _login_dialog=new LoginDialog();

    _login_dialog->setParent(this);

    //这是有先后顺序的，而且会被顶掉，这里相当于设置注册界面才是中心窗口，除非设置一个独立窗口出来
    setCentralWidget(_login_dialog);
    connect(_login_dialog,&LoginDialog::switchRegister,this,&MainWindow::SlotSwitchReg);

    //为什么不直接连接_login_dialog->ui->forget_label的click信号与槽函数，而是通过一个信号转发
    //1、_login_dialog->ui私有成员无法访问
    //2、提升clickLabel的通用性，让这个按钮被点击之后发出一个信号，并且写死该信号会再次faculty一个信号
    connect(_login_dialog,&LoginDialog::switchReset,this,&MainWindow::SlotSwitchRes);
    //设置为中心组件就会自动显示
    //多个设置只会显示最后一个
    //如果创建时就设置父窗口，然后又设置中心组件，就会创建一个独立的窗口，可以后面显式设置parent解决问题,也可以这么做，有一个UP提供了方案
    //连接信号与槽，在槽函数的一方进行连接

}



MainWindow::~MainWindow()
{
    delete ui;
}

//信号和槽并不一定处于同一个对象中，信号和槽是可以处在不同的对象中的，连接对象和槽就是在连接事件源与执行事件体而已
void MainWindow::SlotSwitchReg()
{
    //只有正式点击之后才会创建注册界面并且转换过来
    _register_dialog=new RegisterDialog();

    _register_dialog->setParent(this);
    setCentralWidget(_register_dialog);
    //_login_dialog->hide();
    _register_dialog->show();

    //连接注册界面的返回按钮的信号以及对应的槽函数，设置为主界面
    connect(_register_dialog, &RegisterDialog::sigSwitchLogin, this, &MainWindow::SlotSwitchLog);

}

void MainWindow::SlotSwitchLog()
{
    _login_dialog=new LoginDialog();
    _login_dialog->setParent(this);
    setCentralWidget(_login_dialog);
    _login_dialog->show();

    //重新连接该新界面与槽函数
    connect(_login_dialog,&LoginDialog::switchRegister,this,&MainWindow::SlotSwitchReg);
    connect(_login_dialog,&LoginDialog::switchReset,this,&MainWindow::SlotSwitchRes);

    //hide之后好像就直接销毁了，不存在了，从树节点直接移除，然后释放空间了
    //重新连接信号
    //重新创建界面，并且同时连接这个界面与那个界面的信号

}

void MainWindow::SlotSwitchRes()
{
    //创建reset界面
    _reset_dialog=new ResetDialog();
    _reset_dialog->setParent(this);
    setCentralWidget(_reset_dialog);
    _reset_dialog->show();
    //连接信号
    connect(_reset_dialog,&ResetDialog::switchlogin,this,&MainWindow::SlotSwitchLog);

}

void MainWindow::SlotSwitchLog1()
{
    //重新创建界面，并且同时连接这个界面与那个界面的信号
    _login_dialog=new LoginDialog();
    _login_dialog->setParent(this);
    setCentralWidget(_login_dialog);
    _login_dialog->show();

    connect(_login_dialog,&LoginDialog::switchRegister,this,&MainWindow::SlotSwitchReg);

    connect(_login_dialog,&LoginDialog::switchReset,this,&MainWindow::SlotSwitchRes);
}
